package com.atguigu.gmall.search.controller;

import com.atguigu.gmall.common.bean.ResponseVo;
import com.atguigu.gmall.pms.entity.AttrEntity;
import com.atguigu.gmall.search.service.SearchService;
import com.atguigu.gmall.search.vo.Goods;
import com.atguigu.gmall.search.vo.QueryParamVo;
import com.atguigu.gmall.search.vo.SearchResponseVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/***
 * 为了能够让爬虫程序搜索到我们，即SEO(搜索引擎优化)，我们在这里使用服务器端渲染
 * 故此我们引入了thymeleaf,在服务器端渲染html页面，但是我们写了@RestController这个注解，所有的方法返回值结果都是json格式的
 *
 * 总结：Controller方法的返回值有以下几种情况：
 *      1.Controller层使用了@RestController注解，所有方法的返回值都是json（返回值是被Jackson转为json字符串）
 *      2.Controller层使用了@Controller注解，某方法使用了@ResponseBody，该方法返回值是json，其他方法返回值是字符串 或者 经过thymeleaf等视图解析器渲染的html页面
 *
 */
@Controller
@RequestMapping("/search")
public class SearchController {

    @Autowired
    private SearchService searchService;

    /**
     * 现在我们返回值是前端页面渲染，不是json，那我们怎么将查询到的数据放入这个页面呢
     * 可以引用Model
     * Model表示请求域，将数据出入到请求域中。
     * <p>
     * 三大域：
     * request域：请求域 一次请求期间共享数据，转发是一次请求，同一个请求域。重定向是两次请求，两个请求域
     * session域：会话域 一次会话期间共享数据(浏览器默认将会话对象的key[jsessionid]保存在浏览器的运行内存中，浏览器关闭内存释放)
     * application域：在服务器运行期间共享数据，很少用，因为太占内存，容易内存泄漏
     */
    @GetMapping
    public String search(QueryParamVo queryParamVo, Model model) {
        SearchResponseVo responseVo = searchService.search(queryParamVo);
        model.addAttribute("response", responseVo);
        model.addAttribute("searchParam", queryParamVo);
        return "search";  //渲染search.html页面
    }

        /**
     * 测试thymeleaf的语法：在域中存数据，在页面中获取展示
     * 数据的共享：转发 使用request域共享数据
     */
    @GetMapping("/thymeleaf")
    public String testThymeleaf(Model model, HttpSession session) {
        ArrayList<AttrEntity> attrList = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            AttrEntity attrEntity = new AttrEntity();
            attrEntity.setId((long) i);
            attrEntity.setName("attr" + i);
            attrEntity.setIcon("aaa" + i + ".jpg");
            attrList.add(attrEntity);
        }
        model.addAttribute("modelAttrs", attrList);
        model.addAttribute("attr", attrList.get(0));
        session.setAttribute("sessionAttrs", attrList);
        HashMap<Object, Object> map = new HashMap<>();

        return "hello";
    }

}
